# 1.两数之和
# 给定一个整数数组nums和一个整数目标值target，请你在该数组中找出和为目标值target的那两个整数，并返回它们的数组下标。
# 你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
#
# 示例1：
# 输入：nums = [2, 7, 11, 15], target = 9
# 输出：[0, 1]
# 解释：因为nums[0] + nums[1] == 9 ，返回[0, 1] 。
#
# 示例2
# 输入：nums = [3, 2, 4], target = 6
# 输出：[1, 2]
#
# 示例3：
# 输入：nums = [3, 3], target = 6
# 输出：[0, 1]

class Solution:
    def twoSum(self, nums:int, target: int) ->int:
        hash_num = {}
        length = len(nums)
        for i in range(length):
            mid = target - nums[i]
            if mid not in hash_num:
                hash_num[nums[i]] = i
            else:
                res = [hash_num[mid],i]
        return res

if __name__ == '__main__':
    nums = [2, 7, 11, 15]
    target = 9
    tmp = Solution()
    res= tmp.twoSum(nums,target)
    print(res)
    # 我看了一下之前的答案，是用列表和下标去做的，但是明显比字典要慢很多，还是字典快啊


